# -*- coding: utf-8 -*-
# @Time    : 2021/4/29 17:01
# @Author  : 夏思毅
# @Email   : 2739124228@qq.com
# @File    : 4.29迭代器生成器作业.py
# @Software: PyCharm
#


# 如何判断一个对象是可迭代对象、迭代器或生成器
# 可迭代对象：可以进行for循环，（list, set, str, dict, tuple）
#           有__iter__方法
#           凡是可以返回一个迭代器的对象都可称之为可迭代对象
# 迭代器：可以被next()函数调用并不断返回下一个值的对象称为迭代器。
#          __iter__⽅法和__next__方法
#           可以通过iter(iterable)函数生成一个迭代器对象。
# 生成器：生成器一定是迭代器（反之不成立）
# 生成器其实是一种特殊的迭代器， 不过这种迭代器更加优雅。
# 它不需要手动编写__iter__()和__next__()方法，只需要一个 yeild关键字。

# 迭代器与生成器的区别
# 生成器是一种特殊的迭代器
# 相比于迭代器 更加优雅
# 生成器不需要自己手动去实现__iter__和__next__  只需要一个yiled关键字

# 可迭代对象与迭代器的区别
# __next__，迭代器一定是可迭代对象，可迭代对象不一定是迭代器


# 如何定义一个生成器
# yeild
# 1、生成器推导式：使用()生成generator， 将俩表推导式的[]改成()即可得到生成器
# 2、生成器函数，也是用def定义的，利用关键字yield一次性返回一个结果，阻塞，重新开始

# 如何获取可迭代对象、迭代器与生成器中的数据
# 可迭代对象：__iter__方法，for循环
# 迭代器：__next__方法，for循环
# 生成器：定义函数，使用yeild ，send()方法







import string
import random


# with open("big.txt","w+",encoding="utf-8")as f:
#     for i in range(10):
#         f.write(''.join(random.choices(string.ascii_lowercase,k=random.randint(1,50)))+'\n')

#
def func1():
    with open("big.txt","rb")as f2:
        while 1:
            a=f2.readline()
            if a:
                yield len(a)
            else:
                return
a=func1()
# \n占两个字节
print(max(a)-2)
